import requestConfig from '@/config';

const SHOW_LOG = false;
const server_url = requestConfig.BURIED_POINT;

/**
 * 先集成h5和微信小程序sdk，app后续集成S
 */
class CollectSdk {
	_sensors = null;
	constructor() {
		// #ifdef H5
		this._sensors = require('sa-sdk-javascript');
		// #endif

		// #ifdef MP-WEIXIN
		this._sensors = require('sa-sdk-miniprogram');
		// #endif
	}

	/**
	 * 初始化收集sdk
	 */
	initSdk() {
		// h5 sdk集成
		// #ifdef H5
		if (this._sensors) {
			this._sensors.init({
				server_url,

				/**
				 * 单页面配置，默认开启，若页面中有锚点设计，需要将该配置删除，
				 * 否则触发锚点会多触发 $pageview 事件
				 */
				is_track_single_page: true,
				use_client_time: true,
				send_type: 'beacon',
				show_log: SHOW_LOG,
				heatmap: {
					/**
					 * 是否开启点击图，default 表示开启，自动采集 $WebClick 事件，
					 * 可以设置 'not_collect' 表示关闭。
					 */
					clickmap: 'not_collect',
					/**
					 * 是否开启触达注意力图，not_collect 表示关闭，不会自动采集 $WebStay 事件，
					 * 可以设置 'default' 表示开启。
					 */
					scroll_notice_map: 'default',
					collect_tags: {
						div: {
							max_level: 1 // 默认是 1，即只支持叶子 div。可配置范围是 [1, 2, 3],非该范围配置值，会被当作 1 处理。
						},
						li: true,
						img: true,
						svg: true
					}
				}
			});
		}
		// #endif

		// #ifdef MP-WEIXIN
		if (this._sensors) {
			this._sensors.setPara({
				server_url,
				name: 'sensors',

				// 全埋点控制开关
				autoTrack: {
					appLaunch: true, // 默认为 true，false 则关闭 $MPLaunch 事件采集
					appShow: true, // 默认为 true，false 则关闭 $MPShow 事件采集
					appHide: true, // 默认为 true，false 则关闭 $MPHide 事件采集
					pageShow: true, // 默认为 true，false 则关闭 $MPViewScreen 事件采集
					pageShare: true, // 默认为 true，false 则关闭 $MPShare 事件采集
					mpClick: true, // 默认为 false，true 则开启 $MPClick 事件采集
					mpFavorite: true // 默认为 true，false 则关闭 $MPAddFavorites 事件采集
				},

				// 自定义渠道追踪参数，如source_channel: ["custom_param"]
				source_channel: [],

				// 是否允许控制台打印查看埋点数据(建议开启查看)
				show_log: SHOW_LOG,

				// 是否允许修改 onShareAppMessage 里 return 的 path，用来增加(登录 ID，分享层级，当前的 path)，在 app onShow 中自动获取这些参数来查看具体分享来源、层级等
				allow_amend_share_path: true
			});
		}
		// #endif
	}

	/**
	 * 设置公共属性，包含用户标识、收集渠道来源、站点等公共信息。
	 * 公共属性设置后，才会开启数据收集。
	 * 获取到用户标识后调用该方法，比如payopenid、手机号等
	 */
	setProfile(profile) {
		// #ifdef H5
		// 校验用户标识和渠道，站点有时没有，不会校验
		if (this._sensors) {
			this._sensors.registerPage(profile);
			// 开启自动埋点，用于采集 $pageview 事件。
			this._sensors.quick('autoTrack');
		}
		// #endif

		// #ifdef MP-WEIXIN
		// 校验用户标识和渠道，站点有时没有，不会校验
		if (this._sensors) {
			this._sensors.registerApp(profile);
			// 开启自动埋点，用于采集 $pageview 事件。
			this._sensors.init();
		}
		// #endif
	}

	/**
	 * 手工埋点
	 */
	track(eventName, attr) {
		/**
		 * 手工埋点最少需要有埋点位置和关键id，关键id是根据埋点规范，设定的关键信息。
		 * 比如产品id等。
		 */
		// #ifdef H5
		if (this._sensors) {
			this._sensors.track(eventName, attr);
		}
		// #endif

		// #ifdef MP-WEIXIN
		if (this._sensors) {
			this._sensors.track(eventName, attr);
		}
		// #endif
	}
}

export const collectSdk = new CollectSdk();
